package 协程

import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

/**
 功能：第一种启动方式(runBlocking:T)

 作者：JohnRambo
 创建日期：2019/8/15 13:13
*/

/*
kotlin协程的三种启动方式
1.runBlocking:T
  runBlocking  方法用于启动一个协程任务，通常只用于启动最外层的协程，例如线程环境切换到协程环境。
  runBlocking启动的协程任务会阻断当前线程，直到该协程执行结束。

2.launch:Job
我们最常用的用于启动协程的方式，它最终返回一个Job类型的对象，这个Job类型的对象实际上是一个接口，它包涵了许多我们常用的方法。例如join()启动一个协程、cancel() 取消一个协程

3.async/await:Deferred
async和await是两个函数，这两个函数在我们使用过程中一般都是成对出现的。
async用于启动一个异步的协程任务，await用于去得到协程任务结束时返回的结果，结果是通过一个Deferred对象返回的。
 */
fun main(args: Array<String>) {
    test()
    println("协程执行结束……")
}

fun test() = runBlocking {
    repeat(10){
        println("协程挂起-----$it")
        delay(500)
    }
}